package com.mandao.concurrency.interviewset.javase;

/**
 * Description
 *      类与类之间   单继承  唯一父类  多个子类
 *      接口与接口   多继承
 *      类与接口     可以多实现
 * @author woniu
 * @date 2019/7/18 9:52
 */
public class ExtendsAndImplements {

    public static String pname;

    public void testStatic(String param){
        // 静态方法不能调用 this super
        pname = "bao";
    }

    interface IA {}

    interface IB {}

    interface IC extends IA ,IB{
        // 接口可以多继承
    }

    /**
     * this ：
     *
     * (1) 能访问除构造方法以外所有的属性、方法，通过this.来调用方法和属性
     *
     * (2) 不可以在静态方法中使用
     *
     * (3) 在构造方法中使用this(参数列表) 调用本类的其它构造方法，必须放在构造方法的第一句。
     *
     * super ：访问父类的方法和属性
     *
     * (1) 访问父类的方法和属性；
     *
     * (2) 在构造方法中通过 super(参数列表) 来调用父类的构造方法，必须放在子类构造方法里的第一行。
     */
    class  A{
        private String aname;

        public A() {
            this.aname = "this 指针";
        }

        private void atest(){}

        private void btest(){
            this.atest();
        }

    }

    class  B extends A{
        public B() {
            super.aname = "super 指针";
        }

        private void btest(){
            super.atest();
        }

    }

    /**
     * Class cannot extend multiple classe
     */
    class  C extends A implements IA,IB,IC{

    }

    /*
     * finalize：
     * 	Object类中定义的方法，Java中允许使用finalize 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
     * 	这个方法是由垃圾收集器在销毁对象时调用的，通过重写finalize 方法可以整理系统资源或者执行其他清理工作。
     */

    class Afinalize{
       public Afinalize instance = null;

        @Override
        protected void finalize() throws Throwable {
            super.finalize();
            System.out.println("finalize methode executed");
            instance=this;
        }
    }
}
